На уровне С, объекты Ruby представлены структурами, которые разделяют данные и поведение с помощью иерархии указателей. Указатель klass связывает экземпляр с его «сопутствующим классом» (где живут методы), в то время как указатель super связывает классы с их предками, создавая структурную карту, которую использует виртуальная машина Ruby для разрешения наследования.
1. Указатель klass и флаги
Каждый объект Ruby содержит заголовок с указателем klass и битовой маской флагов. Эти флаги определяют внутреннее состояние объекта, например, помечая автоматически созданные «виртуальные классы» флагом 'V' для обработки назначений методов-одиночек.
2. Разделение состояния (Рисунок 24.1)
Экземпляр, такой как lucille хранит собственные уникальные экземпляры переменных, но у него нет своих методов. Его klass указывает виртуальной машине на Guitar таблицу методов объекта класса.
3. Цепочка наследования
Когда lucille.play() вызывается, Ruby следует по klass указателю. Если метод не найден в Guitar, он следует по super указателю на Object, предоставляя доступ к clone или dup.